﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Web;
using System.Xml;
using System.IO;

namespace TAI.XML
{
    public class ManejadorXML
    {
        private List<Categoria> BD = new List<Categoria>();
        private int indice;
        public int catActual;

        /*Constructor del Manejador. Automáticamente lee el archivo xml y conforme lo lee
         * crea preguntas que las guarda en la BD clasificadas en distintas categorías.
         */
        public ManejadorXML(string rutaArchivo)
        {

            XmlTextReader reader = new XmlTextReader(rutaArchivo);
            string a = "";
            string b = "";
            string c = "";
            string d = "";
            int nivel = 0;
            string enunciado = "";
            string nomCategoria = "";
            string ruta = null;
            double notaA = 0;
            double notaB = 0;
            double notaC = 0;
            double notaD = 0;


            while (reader.Read())
            {
                if (reader.NodeType.Equals(XmlNodeType.Element))
                {
                    switch (reader.Name)
                    {
                        case "categoria":
                            reader.Read();
                            nomCategoria = reader.Value;
                            Categoria tmp = null;
                            for (int i = 0; i < BD.Count; i++)
                            {
                                if (BD.ElementAt(i).nombre.Equals(nomCategoria))
                                {
                                    tmp = BD.ElementAt(i);
                                    indice = i;
                                }
                            }
                            if (tmp == null)
                            {
                                tmp = new Categoria(nomCategoria);
                                BD.Add(tmp);
                                indice = BD.Count - 1;
                            }

                            break;
                        case "enunciado":
                            reader.Read();
                            enunciado = reader.Value;
                            break;
                        case "ruta":
                            reader.Read();
                            ruta = reader.Value;
                            if (!ruta.Equals("null"))
                            {
                                ruta = "UnzippedFiles/" + reader.Value;
                            }
                            break;
                        case "a":
                            reader.Read();
                            a = reader.Value;
                            reader.Read();
                            reader.Read();
                            reader.Read();
                            reader.Read();
                            notaA = double.Parse(reader.Value);
                            break;
                        case "b":
                            reader.Read();
                            b = reader.Value;
                            reader.Read();
                            reader.Read();
                            reader.Read();
                            reader.Read();
                            notaB = double.Parse(reader.Value);
                            break;
                        case "c":
                            reader.Read();
                            c = reader.Value;
                            reader.Read();
                            reader.Read();
                            reader.Read();
                            reader.Read();
                            notaC = double.Parse(reader.Value);
                            break;
                        case "d":
                            reader.Read();
                            d = reader.Value;
                            reader.Read();
                            reader.Read();
                            reader.Read();
                            reader.Read();
                            notaD = double.Parse(reader.Value);
                            break;
                        case "g":
                            reader.Read();
                            nivel = int.Parse(reader.Value);
                            BD.ElementAt(indice).agregarPregunta(new Pregunta(enunciado, a, b, c, d, notaA, notaB, notaC, notaD, nivel, ruta));
                            
                            break;
                    }
                }
            }
            indice = 0;
        }


        /*Retorna la pregunta de un nivel y categoría determinado*/
        public Pregunta getPregunta(int nivel)
        {
            return BD.ElementAt(catActual).obtenerPregunta(nivel);
        }


        public string[] getCategorias()
        {
            string[] tmp = new string[BD.Count];
            for (int i = 0; i < BD.Count; i++)
            {
                tmp[i] = BD.ElementAt(i).nombre;
            }
            return tmp;
        }
    }


}